package com.zkhz.base.common.service;

import java.util.Collections;
import java.util.Map;

/**
 * @Description 当前用户信息获取服务接口
 *
 * @author wuzeqin
 * @date 2020/5/29
 **/
public interface CurrentUserInfoService {

    /**
     * 从当前用户提取对应属性的值，针对String类型的。实际上就是调用结果的toString()。
     * 如果是其他类型则用{@link #getProperty(String, Class)}自行转换
     *
     * @param key 属性名
     * @return 属性值
     */
    default String getProperty(String key){
        Object property = getProperty(key, Object.class);
        return property == null ? null : property.toString();
    }

    /**
     * 从当前用户提取对应属性的值
     *
     * @param key 属性名
     * @param clazz 要转换的类型
     * @return 属性值
     */
    <T> T getProperty(String key, Class<T> clazz);

    /**
     * 从当前用户提取对应属性的值，如果为null，返回默认值
     * @param defaultValue 默认值
     */
    default <T> T getProperty(String key, Class<T> clazz, T defaultValue){
        T property = getProperty(key, clazz);
        return property == null ? defaultValue : property;
    }

    default Map<String, ?> getUserInfo() {
        return Collections.emptyMap();
    }

}
